package org.jiamandan.com.strategy.impl.tram.cmd;

import com.alibaba.fastjson.JSON;
import io.netty.channel.Channel;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.jiamandan.com.constant.BizConstant;
import org.jiamandan.com.dto.ZDConfigDto;
import org.jiamandan.com.entity.RechargeGun;
import org.jiamandan.com.service.IRechargeGunService;
import org.jiamandan.com.strategy.impl.tram.TramBasicService;
import org.jiamandan.com.utils.CommonUtil;
import org.jiamandan.com.utils.ZDObjectUtil;
import org.springframework.stereotype.Service;

/**
 * @version Revision 1.0.1
 * @版权：版权所有 (c) 2021
 * @see:
 * @创建日期：2022-12-12 14:00
 * @功能说明： 8.1. CMD=701 下发查询参数  8.3 CMD=703 下发设置参数
 * @begin
 * @修改记录:
 * @修改后版本 修改人        修改内容
 * @2022-12-01 16:50	        CWJ       	创建
 * @end
 */
@Service
@AllArgsConstructor
public class ZDIssueConfigService implements TramBasicService {

    private IRechargeGunService iRechargeGunService;

    @Override
    public void doExecute(byte[] data, Channel client) {
        ZDConfigDto dto = JSON.parseObject(CommonUtil.bytesToString(data), ZDConfigDto.class);
        RechargeGun gun = iRechargeGunService.getById(dto.getGunId());
        if (gun != null) {
            StringBuilder builder = new StringBuilder();
            /**
             * 充电枪编号 gunNo
             * 参数内容长度 paramContentLen
             * 参数内容 paramContent
             * 参数码   paramCode   见附录四
             * 1充电二维码 0x01 128 最长支持 128 字符的字符
             *  2充电桩软件版本号 0x02 32 充电桩软件版本号，最长 32 个字符
             *  3充电桩硬件版本号 0x03 32 充电桩硬件版本号，最长 32 个字符
             * 4 下发本地 VIN 码 0x10 1+18* N  1：本次下发 VIN 数量，数据范围：1-10   18：VIN 码序号+17 个字节 VIN 码
             * 5 内部保留数据 0x80
             */
            if(dto.getType()==0){
                builder.append(Integer.toHexString(Integer.valueOf(gun.getGunNo())))
                        .append(StringUtils.leftPad(dto.getParamCode(), 2));
                client.writeAndFlush(ZDObjectUtil.splicingMessage(builder.toString(), gun.getGunNo(), BizConstant.Cmd.CMD_701));
            }else{
                builder.append(Integer.toHexString(Integer.valueOf(gun.getGunNo())))
                        .append(StringUtils.leftPad(dto.getParamCode(), 2))
                        .append("02")
                        .append(StringUtils.leftPad(dto.getParamCode(), 2));
                client.writeAndFlush(ZDObjectUtil.splicingMessage(builder.toString(), gun.getGunNo(), BizConstant.Cmd.CMD_703));
            }

        }
    }

}
